UFABC - ESTI019 - Codificação de Sinais Multimídia

0. Introdução - Laboratório 6 - PDS da Voz

Neste laboratório, foram utilizadas as bibliotecas Scipy e Librosa, dentro do ambiente de desenvolvimento do Google Colab, para estudar técnicas relacionadas ao processamento digital de sinais aplicadas na análise de áudios de voz, utilizando a linguagem Python.

Dentre as atividades de processamento desenvolvidas, foi possível atingir os seguintes objetivos:

OBJETIVOS:

  1. Gravar Arquivos de Áudio com dígitos, números gerais, texto lido e poesia
  2. Leitura de Arquivos de Áudio e janelamento
  3. Cálculo das Energias de Tempo Curto
  4. Cálculo dos Espectrogramas
  5. Determinação do Pitch, da Frequência Fundamental e das Formantes ($f_1$ a $f_4$) de Algumas Vogais
  6. Determinação de fonemas surdos, sonoros, consoantes gerais e plosivos

Link para o ambiente Colab utilizado no desenvolvimento desta prática:

1. Gravar Arquivos de Áudio com dígitos, números gerais, texto lido e poesia

Usando o Audacity, ou outro programa de áudio, grave arquivos com:

2. Leitura de Arquivos de Áudio e janelamento

Adquirindo os Arquivos de áudio do repositório do GitHub:

Importando todas as Bibliotecas utilzadas durante esta prática de laboratório, sendo as principais:

  1. Librosa - Manipulação de Áudio;
  2. Scipy - Processamento e Análise de Sinais;
  3. MatploLib - Visualização e Plot de Gráficos;

Função utilizada para ler os arquivos de áudio com a biblioteca Librosa, além de envolver os dados do arquivo de áudio em um envoltório HTML, para visualização no ambiente do Google Colab e plotar a forma de onda completa dos áudios lidos (Amplitude x Tempo).

Abaixo, podemos visualizar os áudios originais gravados pelos intgrantes do grupo, lidos no ambiente do Google Colab:

2.0.1. Voz Dígitos

2.0.2. Voz Falada

2.0.3. Voz Declamada

2.0.4. Voz Lida

2.1 - 3 Definição dos Parâmetros da Análise & Energia de Tempo Curto

Nesta parte do laboratório, obtivemos alguns parâmetros relativos aos áudios originais completos gravados pelos integrantes, tais como:

  1. Frequência de Amostragem do áudio original;
  2. Tamanho do Segmento de áudio utilizado na janela de Hamming;
  3. Número total de segmentos da Janela de Hamming no arquivo completo.

Com estes parâmetros definidos, foi possível obter um plot da janela de Hamming definida para cada um dos áudios dos integrantes do Grupo e partindo desta janela, pudemos estimar a Energia de tempo curto dos arquivos de áudio.

Abaixo, temos a função desenvolvida para realizar os procedimentos acima descritos:

Abaixo, podemos visualizar a saída obtida da função, para cada um dos áudios originais gravados pelos integrantes do grupo:

  1. Podemos observar que os áudios relativos às vozes "Declamada" e "Lida", gravadas pelo integrante Gabriel, apresentaram os maiores picos de Energia de Tempo curto, alcançando os 80dB.

  2. Observamos também que o áudio relativo à voz "Falada", gravada pelo integrante João, alcançou apenas, cerca de 45dB de Energia de Tempo curto, em seu pico, sendo a menor dentre todas as vozes.

2.1.1. Voz Dígitos

2.1.2. Voz Falada

2.1.3. Voz Declamada

2.1.4. Voz Lida

4. Espectrogramas

Nesta parte do laboratório, pudemos visualizar os espectrogramas dos áudios gravados pelos integrantes, mostrando a potência, em escala de decibéis (dB), bem como o espectrograma de frequência para cada um dos áudios originais.

  1. Para converter a amplitude para Decibéis, foi utilizada a função librosa.amplitude_to_db(), tomando como referência o valor máximo do espectro.

  2. Para plotar o gráfico, utilizamos a função librosa.display.specshow()

4.1 - 4.2 Visualização dos Espectrogramas

Abxaixo, temos a Função desenvolvida para plotar os espectrogramas (em decibéis), dos arquivos de áudio do grupo, utilizando as bilbioteca Librosa e MatplotLib para visualização do espectro

Abaixo, podemos visualizar a saída obtida da função acima, para cada um dos áudios originais gravados pelos integrantes do grupo:

4.2.1 Voz Dígitos

4.2.2. Voz Falada

4.2.3. Voz Declamada

4.2.4. Voz Lida

5. Determinação do Pitch e da F0

Nesta parte do laboratório, isolamos alguns trechos dos áudios dos integrantes que possuem vogais, em seguida, plotamos a autocorrelação de cada um dos segmentos das vogais extraídas e utilizamos a função scipy.signal.find_peaks(), para econtrar os picos nos gráficos de autocorrelação.

A partir destes picos, foi calculado o intervalo de tempo entre os dois primeiros picos do gráfico de autocorrelação, para determinarmos o período fundamental ($T_0$) de cada um dos áudios, bem como a frequência fundamental ($f_0$).

5.1 Pitch dos Arquivos do Grupo

Abaixo, temos a função desenvolvida para extrair o segmento do áudio orignal e a partir deste segmento plotar sua autocorrelação e encontrar os picos neste plot para cálculo dos valores de ($T_0$) e ($f_0$). Seguindo as seguintes relações:

  1. O Período de Pitch ($T_{0}$) será o intervalo entre picos sucessivos.

  2. A Frequência Fundamental ($f_0$) será o inverso do periódo de Pitch

Abaixo, podemos visualizar a saída obtida da função acima, para cada um dos áudios originais gravados pelos integrantes do grupo:

5.1.1 Voz Dígitos

5.1.2. Voz Falada

5.1.3. Voz Declamada

5.1.4. Voz Lida

5.2 - 5.3 Determinação das Formantes

Nesta parte do laboratório, determinamos as frequência formantes ($f_1, f_2, f_3, f_4$) dos trechos das vogais, extraídos no item 5.1, para cada um dos áudios dos integrantes do grupos.

Para isso, obtivemos os 4 primeiros picos do espectro de frequência dos sinais extraídos, em escala decibél.

O código utilizado e o resultado obtido, podem ser vistos abaixo:

5.3.b Os quatro primeros picos no espectro são as formantes $f_1$ a $f_4$

Determine as formantes das vogais dos arquivos que vocês calcularam os espectrogramas

5.3.1 Voz Dígitos

5.2.2. Voz Falada

5.3.3. Voz Declamada

5.3.4. Voz Lida

6. Determinação de Consoantes e Plosivos

Nesta parte do Laboratório, isolamos algumas consoantes plosivas ("p" e "b"), econtradas em pequenos fragmentos dos áudios originais.

A função extrair_trecho(audio1,i1,i2), recebe como parâmetros o caminho para o áudio a ser lido, o intevalo de offset e duração utilizados na leitura do arquivo de áudio indicado.

Abaixo, podemos visualizar a saída obtida da função acima, para cada um dos áudios originais gravados pelos integrantes do grupo:

6.0.1. Voz Dígitos

Neste aúdio, não temos consoantes plosivas, visto que o integrante realizou uma contagem numérica de 1 à 10.

6.0.2. Voz Falada

Aqui temos a consoante plosiva em "complicada", próximo aos 2 segundos de duração do áudio do integrante João

6.0.3. Voz Declamada

Aqui temos a consoante plosiva em "obra", próximo aos 2 segundos de duração do áudio do integrante Gabriel

6.0.4. Voz Lida

Aqui temos a consoante plosiva em "perguntaram", próximo aos 2 segundos de duração do áudio do integrante Gabriel

7. Conclusão

Neste laboratório, através da manipulação de dados de áudio, foi possível aplicar técnicas de processamento de sinais para extração e análise de componentes em arquivos de áudio/voz.

Através das bibliotecas scipy e librosa, foi possível realizar processos de ingestão e transformação dos dados para a representação algébrica, bem como a aplicação de técnicas de análise estatística das séries.

A partir dos sinais processados, foram extraídas componentes como:

  1. As energias dos sinais (em janelas de tempo curto)

  2. Espectrogramas (ou seja, a representação STFT do sinal)

  3. Determinação do Pitch da Frequência Fundamental e das Formantes de Algumas Vogais

  4. Determinação de fonemas surdos, sonoros, consoantes gerais e plosivos

Além disso, através da aplicação das técnicas de análise, foi possível avaliar diversas características intrínsecas do sinal, sendo elas: Atenuações do sinal a partir do cálculo das energias, aplicação de janelamento para redução de ondulação, de modo a entregar resultados mais precisos na obtenção do espectro de frequência dos sinais e análise da a evolução espectral de um sinal de voz.

Além das técnicas em si, foi possível aplicar boas práticas para otimização do processo de processamento dos sinais de voz e avaliação de resultados analíticos, tais como identificação de fatores atenuações, formantes (a partir de picos de espectro) e determinação de consoantes e plosivos nos sinais caracterizados.